home *** CD-ROM | disk | FTP | other *** search
Text File | 1995-07-28 | 5.5 KB | 251 lines | [TEXT/MPS ] |
- /*
- File: CContentReader.cp
-
- Contains: xxx put contents here xxx
-
- Written by: Tim Harnett
-
- Copyright: © 1994 by Apple Computer, Inc., all rights reserved.
-
- Change History (most recent first):
-
- <5> 1/13/95 TMH removed use of MailHandler
- <4> 1/11/95 TMH added nested letter functions, and tweak to generalize framework
- <3> 12/12/94 TMH use of gCurrentThread->Yield()
- <2> 11/2/94 JHB Adding support for Sending eWorld Mail
- <1> 9/20/94 TMH Abandon RoadsideRest embrace Mercury
- <3> 9/20/94 TMH some experimental but working threaded stuff
- <2> 9/9/94 TMH TIncoming/TOutgoing adaptations
- 6/17/94 TMH xxx put comment here xxx
-
- To Do: Lots
-
-
- ••• This will probably have to be embellished to handle different kinds
- of reading. Arguments for the type masks etc.
- */
-
-
-
- #ifndef __TThread__
- #include "TThread.h"
- #endif
-
- #ifndef __Globals__
- #include "Globals.h"
- #endif
-
- #ifndef __STRING__
- #include "String.h"
- #endif
-
- #ifndef __OCEERRORS__
- #include "OCEErrors.h"
- #endif
-
- #ifndef __CContentReader__
- #include "CContentReader.h"
- #endif
-
- #ifndef __OutgoingXLetter__
- #include "OutgoingXLetter.h"
- #endif
-
- #ifndef __ALetter__
- #include "ALetter.h"
- #endif
-
- //------------------------------------------
- // C C o n t e n t R e a d e r
- //------------------------------------------
-
-
-
- //--------------------------------------------------------------------------
- CContentReader::CContentReader(MailMsgRef msgRef)
- {
- memset(&fPB,0,sizeof(MSAMGetContentPB));
-
-
- fPB.mailMsgRef = msgRef;
- fPB.buffer.buffer = fContentReadBuf;
- fPB.buffer.bufferSize = kReadBlockSize;
- fPB.segmentMask = kMailTextSegmentMask | kMailPictSegmentMask | kMailSoundSegmentMask |
- kMailMovieSegmentMask; // spool everything except styled text
-
- fOSErr = 0;
-
-
-
- fTextLength = 0;
- fStyledTextLength = 0;
- fSoundLength = 0;
- fMovieLength = 0;
- fPictLength = 0;
-
- fNTextSegments = 0;
- fNStyledTextSegments = 0;
- fNSoundSegments = 0;
- fNMovieSegments = 0;
- fNPictSegments = 0;
-
- }
-
- //--------------------------------------------------------------------------
- OSErr CContentReader::ReadContentBlock()
- {
- fPB.segmentID = 0; //••• ???? why ????
- fPB.buffer.dataSize = 0;
-
-
- MSAMGetContent((MSAMParam *)&fPB,true);
- do {
- gCurrentThread->Yield();
- } while( fPB.ioResult > 0 );
-
- fOSErr = fPB.ioResult;
-
- if (fOSErr==kIPMBlkNotFound) {
- fOSErr = noErr;
- fPB.endOfSegment = true;
- fPB.endOfContent = true;
- }
-
- return fOSErr;
- }
-
- //--------------------------------------------------------------------------
- OSErr CContentReader::ReadContent(TOutgoingXLetter* outgoingXLetter)
- {
-
- do {
-
- this->ReadContentBlock();
-
- switch (this->SegmentType()) {
- case kMailTextSegmentType:
- outgoingXLetter->PutText(*this);
- break;
- case kMailPictSegmentType:
- outgoingXLetter->PutPict(*this);
- break;
- case kMailSoundSegmentType:
- outgoingXLetter->PutSound(*this);
- break;
- case kMailStyledTextSegmentType:
- //outgoingXLetter->PutStyledText(*this);
- break;
- case kMailMovieSegmentType:
- outgoingXLetter->PutMovie(*this);
- break;
- default:
- break;
- }
-
- while( this->MoreSegmentContent() ) // if we are not at the end of a segment skip to its end.
- this->ReadContentBlock();
-
- } while ( this->MoreContent() ) ;
-
-
- return fOSErr;
-
-
- }
-
-
-
- //--------------------------------------------------------------------------
- OSErr CContentReader::ReadContent(TOutgoingALetter* outgoingALetter)
- {
-
- do {
-
- this->ReadContentBlock();
-
- switch (this->SegmentType()) {
- case kMailTextSegmentType:
- outgoingALetter->fHasText = true;
- outgoingALetter->fTextLength = this->SegmentLength();
- outgoingALetter->fNTextSegments++;
- break;
- case kMailPictSegmentType:
- outgoingALetter->fHasPict = true;
- outgoingALetter->fPictLength = this->SegmentLength();
- outgoingALetter->fNPictSegments++;
- break;
- case kMailSoundSegmentType:
- outgoingALetter->fHasSound = true;
- outgoingALetter->fSoundLength = this->SegmentLength();
- outgoingALetter->fNSoundSegments++;
- break;
- case kMailStyledTextSegmentType:
- outgoingALetter->fHasStyledText = true;
- outgoingALetter->fStyledTextLength = this->SegmentLength();
- outgoingALetter->fNStyledTextSegments++;
- break;
- case kMailMovieSegmentType:
- outgoingALetter->fHasMovie = true;
- outgoingALetter->fMovieLength = this->SegmentLength();
- outgoingALetter->fNMovieSegments++;
- break;
- default:
- break;
- }
-
- while( this->MoreSegmentContent() ) // if we are not at the end of a segment skip to its end.
- this->ReadContentBlock();
-
- } while ( this->MoreContent() ) ;
-
-
- return fOSErr;
-
-
- }
-
-
- //--------------------------------------------------------------------------
- OSErr CContentReader::InventoryContent()
- {
-
- do {
-
- this->ReadContentBlock();
-
- switch (this->SegmentType()) {
- case kMailTextSegmentType:
- fTextLength = this->SegmentLength();
- fNTextSegments++;
- break;
- case kMailPictSegmentType:
- fPictLength = this->SegmentLength();
- fNPictSegments++;
- break;
- case kMailSoundSegmentType:
- fSoundLength = this->SegmentLength();
- fNSoundSegments++;
- break;
- case kMailStyledTextSegmentType:
- fStyledTextLength = this->SegmentLength();
- fNStyledTextSegments++;
- break;
- case kMailMovieSegmentType:
- fMovieLength = this->SegmentLength();
- fNMovieSegments++;
- break;
- default:
- break;
- }
-
- while( this->MoreSegmentContent() ) // if we are not at the end of a segment skip to its end.
- this->ReadContentBlock();
-
- } while ( this->MoreContent() ) ;
-
-
- return fOSErr;
-
-
- }
-